When building distributed and redundant telecommunication systems, some sort of messaging layer is used to provide for inter-process (or thread) communication. This allows the distributed software finite state machines to communicate in order to provide a service.
Typical messaging systems provide a way of sending point-to-point messages between components. The ability to multicast or broadcast messages is sometimes provided, but not always.
Many inter-process communication schemes are also operating system and/or backplane specific. This makes porting their services difficult and impacts the overall software architecture of the system because messaging is normally a fundamental service upon which all other software is written.
Many other systems provide services like name resolution, network time distribution, and distributed heartbeat layering on top of messaging as another application. This also leads to inefficiencies in processing.